<template>
  <div class="container">
    <div class="main">
      <div class="content">
        <div class="title">
          {{ questionList[0].name }}
        </div>
        <template v-for="(question, questionIndex) in questionList" :key="questionIndex">
          <!-- 单选 -->
          <template v-if="question.type == 1">
            <div class="question">
              {{ questionIndex + 1 }}. {{ question.description }}（单选）
            </div>
            <div v-for="(answer, index) in question.content" :key="index" class="answer">
              <div class="selected">
                <input :id="`select-${questionIndex}-${index}`" :name="`radio-group-${questionIndex}`" type="radio"
                  v-model="selectedAnswers[questionIndex]" :value="answer.text">
                <label :for="`select-${questionIndex}-${index}`">{{ answer.text }}</label>
              </div>
            </div>
          </template>

          <!-- 多选 -->
          <template v-if="question.type == 2">
            <div class="question">
              {{ questionIndex + 1 }}. {{ question.description }}（多选）
            </div>
            <div v-for="(answer, index) in question.content" :key="index" class="answer">
              <div class="selected">
                <input :id="`checkbox-${questionIndex}-${index}`" name="checkbox" type="checkbox"
                  v-model="selectedAnswers[questionIndex]" :value="answer.text">
                <label :for="`checkbox-${questionIndex}-${index}`">{{ answer.text }}</label>
              </div>
            </div>
          </template>

          <!-- 简答题 -->
          <template v-if="question.type == 3">
            <div class="Short-answers">
              <div class="question">
                {{ questionIndex + 1 }}. {{ question.description }}
              </div>
              <el-input v-model="editorTitles[questionIndex]" style="width: 100%; padding: 3.5%" size="large"
                placeholder="请输入标题" />
              <div class="editor">
                <div style="border: 1px solid #ccc">
                  <Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRefs[questionIndex]"
                    :defaultConfig="toolbarConfig" :mode="mode" />
                  <Editor style="height: 500px; overflow-y: hidden;" v-model="editorContents[questionIndex]"
                    :defaultConfig="editorConfig" :mode="mode"
                    @onCreated="editor => handleCreated(editor, questionIndex)" />
                </div>
              </div>
            </div>
          </template>
        </template>

        <!-- 提交按钮 -->
        <div class="submit">
          <img src="https://d31zlh4on95l9h.cloudfront.net/images/5iujb101000d2foxm6thylaa50qz6lgl.png" @click="submit">
        </div>
        <!-- 提交次数 -->
        <div class="submit-times">
          <span>您已提交{{ sub }}次，每个作业可以提交3次</span>
        </div>
      </div>
    </div>
  </div>


</template>

<script setup>
import { onMounted, ref, shallowRef } from 'vue';
import homeworkApi from "@/api/HomeworkApi.js";
import { ElMessage } from "element-plus";
import '@wangeditor/editor/dist/css/style.css' // 引入 css
import { onBeforeUnmount } from 'vue'
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
import { useRoute, useRouter } from "vue-router";

const router = useRouter();
const route = useRoute();
let groupId = route.params.id;
let sub = route.params.sub;

// 编辑器实例，必须用 shallowRef
const editorRefs = ref([]);

// 内容 HTML
const editorContents = ref([]);
const editorTitles = ref([]);

// 模拟 ajax 异步获取内容
onMounted(() => {
  setTimeout(() => {
    editorContents.value = editorContents.value.map(() => '');
  }, 1500)
})

const toolbarConfig = {
  excludeKeys: [
    'justify',
    'table',
    'codeBlock',
    'divider',
    'undo',
    'redo',
    'insertImage',  // 去掉插入图片
    'insertLink',   // 去掉插入链接
    'insertTable',  // 去掉插入表格
    'video',
    'group-more-style',
    'group-image',
    'group-video',
    'fullScreen',
    'todo'
  ],
  insertKeys: {
    index: 0,
    keys: ['bold', 'italic']
  }
}


const editorConfig = {
  placeholder: '请输入内容...',
  toolbarKeys: toolbarConfig.toolbarKeys
}

// 组件销毁时，也及时销毁编辑器
onBeforeUnmount(() => {
  editorRefs.value.forEach(editor => {
    if (editor == null) return;
    editor.destroy();
  });
})

const handleCreated = (editor, questionIndex) => {
  editorRefs.value[questionIndex] = editor; // 记录 editor 实例
  editor.config.toolbarConfig = toolbarConfig; // 确保配置正确应用
}

const questionList = ref([]);

function getQuestionList() {
  homeworkApi.getHomeworkQuestion(groupId).then(resp => {
    if (resp.code == 200) {
      questionList.value = resp.data;
      for (let i = 0; i < questionList.value.length; i++) {
        questionList.value[i].content = JSON.parse(questionList.value[i].content);
        // 初始化 editorTitles 和 editorContents
        editorTitles.value.push('');
        editorContents.value.push('');
        // 初始化 selectedAnswers 为数组
        selectedAnswers.value.push([]);
      }
    } else {
      ElMessage.error("未知错误，请联系管理员");
    }
  });
}
getQuestionList();

// 提交作业
const homework = ref([]);

const selectedAnswers = ref([]);
questionList.value.forEach(() => {
  selectedAnswers.value.push([]);
});

// 上一个页面传递的参数 groupId
function submit() {
  homework.value = [];
  for (let i = 0; i < questionList.value.length; i++) {
    //如果有题目未作答，弹出提示
    if (questionList.value[i].type == 1 || questionList.value[i].type == 2) {
      if (selectedAnswers.value[i].length == 0) {
        ElMessage.error("您有题目未作答");
        return;
      }
    } else if (questionList.value[i].type == 3) {
      //标题不能为空
      if (editorTitles.value[i] == '') {
        ElMessage.error("标题不能为空");
        return;
      }
      if (editorTitles.value[i] == '') {
        ElMessage.error("您有题目未作答");
        return;
      }
    }
    if (questionList.value[i].type == 1 || questionList.value[i].type == 2) {
      homework.value.push({
        "id": questionList.value[i].id,
        "answer": selectedAnswers.value[i],
        "type": questionList.value[i].type
      });
    } else if (questionList.value[i].type == 3) {
      const editor = editorRefs.value[i];
      const plainText = editor ? editor.getText() : '';
      homework.value.push({
        "id": questionList.value[i].id,
        "answer": [editorTitles.value[i], plainText],
        "type": questionList.value[i].type
      });
    }
  }
  let groupId = route.params.id;
  let sub = route.params.sub;
  if (sub <= 2) {
    homeworkApi.submitHomework(homework.value, groupId).then(resp => {
      if (resp.code == 200) {
        ElMessage.success("提交成功");
        homework.value = [];
        router.push("/show");
      } else {
        ElMessage.error("未知错误，请联系管理员");
      }
    });
  } else {
    ElMessage.error("提交失败您，已提交3次，每个作业可以提交3次");
  }
}
</script>

<style scoped>
.container {
  text-align: center;
  margin-left: auto;
  margin-right: auto;
  width: 34.375rem;
  height: 114.399375rem;
}

.main {
  background-image: url("https://lfjf.rzfwq.com/jtzy/Product/pcjingwang/images/20230823/qiangdianbanHomeWorkBg.png");
  background-size: contain;
  background-position: center 0;
  background-repeat: no-repeat;
  margin: 0;
  width: 100%;
  height: 1830px;
  text-align: center;
  position: relative;
}

.content {
  position: absolute;
  width: 93%;
  height: 80%;
  overflow-y: scroll;
  /* 居中显示 */
  left: 50%;
  transform: translate(-50%, 0);
  top: 12.5%;
  text-align: left;
}

/* 滚动条样式 */
.content::-webkit-scrollbar {
  width: 3px;
}

.content::-webkit-scrollbar-track {
  background: #f1f1f1;
  /* 滚动条轨道的背景色 */
}

.content::-webkit-scrollbar-thumb {
  background: #d9d9d9;
  /* 滚动条滑块的颜色 */
  border-radius: 6px;
  /* 滑块的圆角 */
}

.title {
  font-size: 1.65rem;
  font-weight: 600;
  /* 居中显示 */
  text-align: center;
  /*字体颜色*/
  color: #3f27b1;
}

.question {
  padding-top: 10%;
  padding-left: 4%;
  font-size: 1.35rem;
  font-weight: 500;
}

.answer {
  padding-top: 2.5%;
  padding-left: 7%;
  font-size: 1.35rem;
}

.selected {
  display: block;
  padding: 1% 0 1.2% 0;
}


.selected input[name="checkbox"] {
  margin-right: 1%;
  width: 1.2rem;
  height: 1rem;
  /* 透明度 */
  opacity: 0.8;
  cursor: pointer;
  /* 鼠标悬停时变成手的形状 */
}

.selected input[type="radio"] {
  margin-right: 1%;
  width: 1.2rem;
  height: 1rem;
  /* 透明度 */
  opacity: 0.8;
  cursor: pointer;
  /* 鼠标悬停时变成手的形状 */
}

/* 单选按钮选中时的样式 */
.selected input[type="radio"]:checked {
  accent-color: blue;
  /* 设置选中时的颜色为蓝色 */
}

/* 多选按钮选中时的样式 */
.selected input[type="checkbox"]:checked {
  accent-color: blue;
  /* 设置选中时的颜色为蓝色 */
}

.selected label {
  cursor: pointer;
}

.editor {
  padding-top: 2.5%;
  padding-left: 3.5%;
  padding-right: 3.5%;
  height: 30rem;
}

.Short-answers {
  height: 48rem;
}

.submit {
  display: block;
  text-align: center;
}

.submit img {
  padding-top: 2.5%;
  padding-left: 3.5%;
  padding-right: 3.5%;
  cursor: pointer;
  width: 67%;
}

.submit-times {
  font-size: 0.8rem;
  color: #858585;
  text-align: center;
}
</style>
